package com.example.bookmanagement.repository;

import com.example.bookmanagement.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {

    // 根据书名查找（模糊查询）
    List<Book> findByTitleContainingIgnoreCase(String title);

    // 根据作者查找（模糊查询）
    List<Book> findByAuthorContainingIgnoreCase(String author);

    // 根据ISBN精确查找
    Optional<Book> findByIsbn(String isbn);

    // 根据出版年份范围查找
    List<Book> findByPublicationYearBetween(Integer startYear, Integer endYear);

    // 检查ISBN是否存在
    boolean existsByIsbn(String isbn);

    // 检查ISBN是否存在（排除指定ID）
    @Query("SELECT COUNT(b) > 0 FROM Book b WHERE b.isbn = :isbn AND b.id != :excludeId")
    boolean existsByIsbnAndIdNot(@Param("isbn") String isbn, @Param("excludeId") Long excludeId);

    // 自定义查询：根据书名或作者搜索
    @Query("SELECT b FROM Book b WHERE LOWER(b.title) LIKE LOWER(CONCAT('%', :keyword, '%')) OR LOWER(b.author) LIKE LOWER(CONCAT('%', :keyword, '%'))")
    List<Book> searchByTitleOrAuthor(@Param("keyword") String keyword);

    // 根据出版社搜索
    List<Book> findByPublisherContainingIgnoreCase(String publisher);
}